diff --git a/tests/codeigniter/Setup_test.php b/tests/codeigniter/Setup_test.php
index e088b51..550245f 100644
--- a/tests/codeigniter/Setup_test.php
+++ b/tests/codeigniter/Setup_test.php
@@ -2,7 +2,7 @@
 
 class Setup_test extends PHPUnit_Framework_TestCase {
 	
-	function testNonsense()
+	function test_nonsense()
 	{
 		$this->markTestIncomplete('not implemented');
 		// ensure that our bootstrapped test environment
diff --git a/tests/codeigniter/core/Common_test.php b/tests/codeigniter/core/Common_test.php
new file mode 100644
index 0000000..cec1298
--- /dev/null
+++ b/tests/codeigniter/core/Common_test.php
@@ -0,0 +1,16 @@
+<?php
+
+require_once(BASEPATH.'helpers/email_helper.php');
+
+class Common_test extends CI_TestCase
+{
+	
+	// ------------------------------------------------------------------------
+	
+	public function test_is_php()
+	{
+		$this->assertEquals(TRUE, is_php('1.2.0'));
+		$this->assertEquals(FALSE, is_php('9999.9.9'));
+	}
+	
+}
\ No newline at end of file
diff --git a/tests/codeigniter/core/Config_test.php b/tests/codeigniter/core/Config_test.php
index b04dd67..b6c57da 100644
--- a/tests/codeigniter/core/Config_test.php
+++ b/tests/codeigniter/core/Config_test.php
@@ -2,7 +2,7 @@
 
 class Config_test extends CI_TestCase {
 
-	public function setUp()
+	public function set_up()
 	{
 		$cls =& $this->ci_core_class('cfg');
 				
@@ -18,7 +18,7 @@
 	
 	// --------------------------------------------------------------------
 
-	public function testItem()
+	public function test_item()
 	{
 		$this->assertEquals('http://example.com/', $this->config->item('base_url'));
 
@@ -32,7 +32,7 @@
 	
 	// --------------------------------------------------------------------
 	
-	public function testSetItem()
+	public function test_set_item()
 	{
 		$this->assertFalse($this->config->item('not_yet_set'));
 		
@@ -43,7 +43,7 @@
 
 	// --------------------------------------------------------------------
 	
-	public function testSlashItem()
+	public function test_slash_item()
 	{
 		// Bad Config value
 		$this->assertFalse($this->config->slash_item('no_good_item'));
@@ -55,7 +55,7 @@
 
 	// --------------------------------------------------------------------
 
-	public function testSiteUrl()
+	public function test_site_url()
 	{
 		$this->assertEquals('http://example.com/index.php', $this->config->site_url());
 		
@@ -85,7 +85,7 @@
 
 	// --------------------------------------------------------------------
 	
-	public function testSystemUrl()
+	public function test_system_url()
 	{
 		$this->assertEquals('http://example.com/system/', $this->config->system_url());
 	}
diff --git a/tests/codeigniter/core/Lang_test.php b/tests/codeigniter/core/Lang_test.php
index f65b335..dcc3d08 100644
--- a/tests/codeigniter/core/Lang_test.php
+++ b/tests/codeigniter/core/Lang_test.php
@@ -4,7 +4,7 @@
 	
 	protected $lang;
 	
-	public function setUp()
+	public function set_up()
 	{
 		$cls = $this->ci_core_class('lang');
 		$this->lang = new $cls;
@@ -12,7 +12,7 @@
 	
 	// --------------------------------------------------------------------
 	
-	public function testLoad()
+	public function test_load()
 	{
 		// get_config needs work
 		$this->markTestIncomplete('get_config needs work');
@@ -21,7 +21,7 @@
 	
 	// --------------------------------------------------------------------
 
-	public function testLine()
+	public function test_line()
 	{
 		$this->markTestIncomplete('get_config needs work');
 		
diff --git a/tests/codeigniter/core/Loader_test.php b/tests/codeigniter/core/Loader_test.php
index 49679e2..9ba870b 100644
--- a/tests/codeigniter/core/Loader_test.php
+++ b/tests/codeigniter/core/Loader_test.php
@@ -37,7 +37,7 @@
 	
 	private $ci_obj;
 	
-	public function setUp()
+	public function set_up()
 	{
 		// Instantiate a new loader
 		$this->load = new Extended_Loader();
@@ -51,7 +51,7 @@
 
 	// --------------------------------------------------------------------
 	
-	public function testLibrary()
+	public function test_library()
 	{
 		$this->_setup_config_mock();
 		
@@ -69,7 +69,7 @@
 
 	// --------------------------------------------------------------------
 
-	public function testLoadLibraryInApplicationDir()
+	public function test_load_library_in_application_dir()
 	{
 		$this->_setup_config_mock();
 		
@@ -101,7 +101,7 @@
 
 	// --------------------------------------------------------------------
 
-	public function testNonExistentModel()
+	public function test_non_existent_model()
 	{
 		$this->setExpectedException(
 			'Exception',
@@ -116,7 +116,7 @@
 	/**
 	 * @coverts CI_Loader::model
 	 */
-	public function testModels()
+	public function test_models()
 	{
 		$this->ci_set_core_class('model', 'CI_Model');
 		
@@ -147,7 +147,7 @@
 	/**
 	 * @coverts CI_Loader::view
 	 */
-	public function testLoadView()
+	public function test_load_view()
 	{
 		$this->ci_set_core_class('output', 'CI_Output');
 		
@@ -158,7 +158,7 @@
 		// Use the optional return parameter in this test, so the view is not
 		// run through the output class.
 		$this->assertEquals('This is my test page.  World!',
-			$this->load->view('unit_test_view', array('hello' => "World!"), TRUE));
+		$this->load->view('unit_test_view', array('hello' => "World!"), TRUE));
 		
 	}
 
@@ -167,7 +167,7 @@
 	/**
 	 * @coverts CI_Loader::view
 	 */
-	public function testNonExistentView()
+	public function test_non_existent_view()
 	{
 		$this->setExpectedException(
 			'Exception',
@@ -179,7 +179,7 @@
 
 	// --------------------------------------------------------------------
 
-	public function testFile()
+	public function test_file()
 	{
 		$content = 'Here is a test file, which we will load now.';
 		$file = vfsStream::newFile('ci_test_mock_file.php')->withContent($content)
@@ -202,7 +202,7 @@
 
 	// --------------------------------------------------------------------
 	
-	public function testVars()
+	public function test_vars()
 	{
 		$vars = array(
 			'foo'	=> 'bar'
@@ -214,7 +214,7 @@
 
 	// --------------------------------------------------------------------
 	
-	public function testHelper()
+	public function test_helper()
 	{
 		$this->assertEquals(NULL, $this->load->helper('array'));
 		
@@ -228,7 +228,7 @@
 	
 	// --------------------------------------------------------------------
 
-	public function testLoadingMultipleHelpers()
+	public function test_loading_multiple_helpers()
 	{
 		$this->assertEquals(NULL, $this->load->helpers(array('file', 'array', 'string')));
 	}
@@ -242,7 +242,7 @@
 
 	// --------------------------------------------------------------------
 
-	public function testLoadConfig()
+	public function test_load_config()
 	{
 		$this->_setup_config_mock();
 		
@@ -251,7 +251,7 @@
 	
 	// --------------------------------------------------------------------
 
-	public function testLoadBadConfig()
+	public function test_load_bad_config()
 	{
 		$this->_setup_config_mock();
 		
diff --git a/tests/codeigniter/helpers/array_helper_test.php b/tests/codeigniter/helpers/array_helper_test.php
index fd306ce..62559de 100644
--- a/tests/codeigniter/helpers/array_helper_test.php
+++ b/tests/codeigniter/helpers/array_helper_test.php
@@ -6,7 +6,7 @@
 
 class Array_helper_test extends CI_TestCase
 {
-	public function setUp()
+	public function set_up()
 	{
 		$this->my_array = array(
 			'foo'		=> 'bar',
@@ -18,7 +18,7 @@
 	
 	// ------------------------------------------------------------------------
 	
-	public function testElementWithExistingItem()
+	public function test_element_with_existing_item()
 	{	
 		$this->assertEquals(FALSE, element('testing', $this->my_array));
 		
@@ -29,7 +29,7 @@
 	
 	// ------------------------------------------------------------------------	
 
-	public function testRandomElement()
+	public function test_random_element()
 	{
 		// Send a string, not an array to random_element
 		$this->assertEquals('my string', random_element('my string'));
@@ -40,7 +40,7 @@
 
 	// ------------------------------------------------------------------------	
 	
-	public function testElements()
+	public function test_elements()
 	{
 		$this->assertEquals(TRUE, is_array(elements('test', $this->my_array)));
 		$this->assertEquals(TRUE, is_array(elements('foo', $this->my_array)));
diff --git a/tests/codeigniter/helpers/email_helper_test.php b/tests/codeigniter/helpers/email_helper_test.php
new file mode 100644
index 0000000..7324e81
--- /dev/null
+++ b/tests/codeigniter/helpers/email_helper_test.php
@@ -0,0 +1,16 @@
+<?php
+
+require_once(BASEPATH.'helpers/email_helper.php');
+
+class Email_helper_test extends CI_TestCase
+{
+	
+	public function test_valid_email()
+	{
+		$this->assertEquals(FALSE, valid_email('test'));
+		$this->assertEquals(FALSE, valid_email('test@test@test.com'));
+		$this->assertEquals(TRUE, valid_email('test@test.com'));
+		$this->assertEquals(TRUE, valid_email('my.test@test.com'));
+	}
+	
+}
\ No newline at end of file
diff --git a/tests/codeigniter/helpers/html_helper_test.php b/tests/codeigniter/helpers/html_helper_test.php
index 8c0e533..706874f 100644
--- a/tests/codeigniter/helpers/html_helper_test.php
+++ b/tests/codeigniter/helpers/html_helper_test.php
@@ -4,14 +4,25 @@
 
 class Html_helper_test extends CI_TestCase
 {
-	public function testHeading()
+	
+	// ------------------------------------------------------------------------
+	
+	public function test_br()
+	{
+		$this->assertEquals('<br /><br />', br(2));
+	}
+	
+	// ------------------------------------------------------------------------
+	
+	public function test_heading()
 	{
 		$this->assertEquals('<h1>foobar</h1>', heading('foobar'));
+		$this->assertEquals('<h2 class="bar">foobar</h2>', heading('foobar', 2, 'class="bar"'));
 	}
 
 	// ------------------------------------------------------------------------
 	
-	public function testUl()
+	public function test_Ul()
 	{
 		$expect = <<<EOH
 <ul>
@@ -47,14 +58,14 @@
 	
 	// ------------------------------------------------------------------------
 
-	public function testNBS()
+	public function test_NBS()
 	{
 		$this->assertEquals('&nbsp;&nbsp;&nbsp;', nbs(3));
 	}
 
 	// ------------------------------------------------------------------------
 	
-	public function testMeta()
+	public function test_meta()
 	{
 		$this->assertEquals("<meta name=\"test\" content=\"foo\" />\n", meta('test', 'foo'));
 		
diff --git a/tests/codeigniter/helpers/inflector_helper_test.php b/tests/codeigniter/helpers/inflector_helper_test.php
index e59875e..34bc34e 100644
--- a/tests/codeigniter/helpers/inflector_helper_test.php
+++ b/tests/codeigniter/helpers/inflector_helper_test.php
@@ -5,7 +5,7 @@
 class Inflector_helper_test extends CI_TestCase {
 	
 	
-	public function testSingular()
+	public function test_singular()
 	{
 		$strs = array(
 			'tellies'		=> 'telly',
@@ -22,7 +22,7 @@
 	
 	// --------------------------------------------------------------------
 	
-	public function testPlural()
+	public function test_plural()
 	{
 		$strs = array(
 			'telly'			=> 'tellies',
@@ -40,7 +40,7 @@
 
 	// --------------------------------------------------------------------
 	
-	public function testCamelize()
+	public function test_camelize()
 	{
 		$strs = array(
 			'this is the string'	=> 'thisIsTheString',
@@ -57,7 +57,7 @@
 
 	// --------------------------------------------------------------------
 	
-	public function testUnderscore()
+	public function test_underscore()
 	{
 		$strs = array(
 			'this is the string'	=> 'this_is_the_string',
@@ -74,7 +74,7 @@
 
 	// --------------------------------------------------------------------
 	
-	public function testHumanize()
+	public function test_humanize()
 	{
 		$strs = array(
 			'this_is_the_string'	=> 'This Is The String',
diff --git a/tests/codeigniter/helpers/number_helper_test.php b/tests/codeigniter/helpers/number_helper_test.php
new file mode 100644
index 0000000..02fc49c
--- /dev/null
+++ b/tests/codeigniter/helpers/number_helper_test.php
@@ -0,0 +1,13 @@
+<?php
+
+require_once(BASEPATH.'helpers/number_helper.php');
+
+class Number_helper_test extends CI_TestCase
+{
+	
+	public function test_byte_format()
+	{
+		// $this->assertEquals('456 Bytes', byte_format(456));
+	}
+	
+}
\ No newline at end of file
diff --git a/tests/codeigniter/helpers/string_helper_test.php b/tests/codeigniter/helpers/string_helper_test.php
index 00ba5de..5e0ee45 100644
--- a/tests/codeigniter/helpers/string_helper_test.php
+++ b/tests/codeigniter/helpers/string_helper_test.php
@@ -4,7 +4,7 @@
 
 class String_helper_test extends CI_TestCase
 {
-	public function testTrimSlashes()
+	public function test_trim_slashes()
 	{
 		$strs = array(
 			'//Slashes//\/'	=> 'Slashes//\\',
@@ -18,15 +18,8 @@
 	}
 	
 	// --------------------------------------------------------------------	
-	
-	public function testStripSlashes()
-	{
-		$this->assertEquals("This is totally foo bar'd", trim_slashes("This is totally foo bar'd"));
-	}
 
-	// --------------------------------------------------------------------	
-
-	public function testStripQuotes()
+	public function test_strip_quotes()
 	{
 		$strs = array(
 			'"me oh my!"'		=> 'me oh my!',
@@ -41,7 +34,7 @@
 
 	// --------------------------------------------------------------------	
 	
-	public function testQuotesToEntities()
+	public function test_quotes_to_entities()
 	{
 		$strs = array(
 			'"me oh my!"'		=> '&quot;me oh my!&quot;',
@@ -56,7 +49,7 @@
 
 	// --------------------------------------------------------------------	
 	
-	public function testReduceDoubleSlashes()
+	public function test_reduce_double_slashes()
 	{
 		$strs = array(
 			'http://codeigniter.com'		=> 'http://codeigniter.com',
@@ -72,7 +65,7 @@
 
 	// --------------------------------------------------------------------	
 	
-	public function testReduceMultiples()
+	public function test_reduce_multiples()
 	{
 		$strs = array(
 			'Fred, Bill,, Joe, Jimmy'	=> 'Fred, Bill, Joe, Jimmy',
@@ -97,7 +90,7 @@
 	
 	// --------------------------------------------------------------------	
 	
-	public function testRepeater()
+	public function test_repeater()
 	{
 		$strs = array(
 			'a'			=> 'aaaaaaaaaa',
@@ -114,4 +107,12 @@
 
 	// --------------------------------------------------------------------	
 
+
+	public function test_random_string()
+	{
+		$this->assertEquals(16, strlen(random_string('alnum', 16)));
+		$this->assertEquals(32, strlen(random_string('unique', 16)));
+		$this->assertInternalType('string', random_string('numeric', 16));
+	}
+	
 }
\ No newline at end of file
diff --git a/tests/codeigniter/helpers/text_helper_test.php b/tests/codeigniter/helpers/text_helper_test.php
index 22c834b..a0866e6 100644
--- a/tests/codeigniter/helpers/text_helper_test.php
+++ b/tests/codeigniter/helpers/text_helper_test.php
@@ -6,14 +6,14 @@
 {
 	private $_long_string;
 	
-	public function setUp()
+	public function set_up()
 	{
 		$this->_long_string = 'Once upon a time, a framework had no tests.  It sad.  So some nice people began to write tests.  The more time that went on, the happier it became.  Everyone was happy.';
 	}
 	
 	// ------------------------------------------------------------------------
 	
-	public function testWordLimiter()
+	public function test_word_limiter()
 	{
 		$this->assertEquals('Once upon a time,&#8230;', word_limiter($this->_long_string, 4));
 		$this->assertEquals('Once upon a time,&hellip;', word_limiter($this->_long_string, 4, '&hellip;'));
@@ -22,7 +22,7 @@
 
 	// ------------------------------------------------------------------------	
 	
-	public function testCharacterLimiter()
+	public function test_character_limiter()
 	{
 		$this->assertEquals('Once upon a time, a&#8230;', character_limiter($this->_long_string, 20));
 		$this->assertEquals('Once upon a time, a&hellip;', character_limiter($this->_long_string, 20, '&hellip;'));
@@ -32,7 +32,7 @@
 
 	// ------------------------------------------------------------------------	
 	
-	public function testAsciiToEntities()
+	public function test_ascii_to_entities()
 	{
 		$strs = array(
 			'“‘ “test”'			=> '&#8220;&#8216; &#8220;test&#8221;',
@@ -47,7 +47,7 @@
 
 	// ------------------------------------------------------------------------	
 
-	public function testEntitiesToAscii()
+	public function test_entities_to_ascii()
 	{
 		$strs = array(
 			'&#8220;&#8216; &#8220;test&#8221;' => '“‘ “test”',
@@ -59,10 +59,18 @@
 			$this->assertEquals($expect, entities_to_ascii($str));
 		}		
 	}
+	
+	// ------------------------------------------------------------------------	
+	
+	function test_convert_accented_characters() 
+	{
+		$this->assertEquals('AAAeEEEIIOOEUUUeY', convert_accented_characters('ÀÂÄÈÊËÎÏÔŒÙÛÜŸ'));
+		$this->assertEquals('a e i o u n ue', convert_accented_characters('á é í ó ú ñ ü'));
+	}
 
 	// ------------------------------------------------------------------------	
 	
-	public function testCensoredWords()
+	public function test_censored_words()
 	{
 		$censored = array('boob', 'nerd', 'ass', 'fart');
 		
@@ -86,7 +94,7 @@
 
 	// ------------------------------------------------------------------------	
 
-	public function testHighlightCode()
+	public function test_highlight_code()
 	{
 		$code = '<?php var_dump($this); ?>';
 		$expect = "<code><span style=\"color: #000000\">\n<span style=\"color: #0000BB\">&lt;?php&nbsp;var_dump</span><span style=\"color: #007700\">(</span><span style=\"color: #0000BB\">\$this</span><span style=\"color: #007700\">);&nbsp;</span><span style=\"color: #0000BB\">?&gt;&nbsp;</span>\n</span>\n</code>";
@@ -96,7 +104,7 @@
 
 	// ------------------------------------------------------------------------	
 
-	public function testHighlightPhrase()
+	public function test_highlight_phrase()
 	{
 		$strs = array(
 			'this is a phrase'			=> '<strong>this is</strong> a phrase',
@@ -114,7 +122,7 @@
 
 	// ------------------------------------------------------------------------	
 
-	public function testEllipsizing()
+	public function test_ellipsizing()
 	{
 		$strs = array(
 			'0'		=> array(
diff --git a/tests/codeigniter/helpers/xml_helper_test.php b/tests/codeigniter/helpers/xml_helper_test.php
new file mode 100644
index 0000000..49f49e1
--- /dev/null
+++ b/tests/codeigniter/helpers/xml_helper_test.php
@@ -0,0 +1,13 @@
+<?php
+
+require_once(BASEPATH.'helpers/xml_helper.php');
+
+class Xml_helper_test extends CI_TestCase
+{
+	
+	public function test_xml_convert()
+	{
+		$this->assertEquals('&lt;tag&gt;my &amp; test &#45; &lt;/tag&gt;', xml_convert('<tag>my & test - </tag>'));
+	}
+	
+}
\ No newline at end of file
diff --git a/tests/codeigniter/libraries/Parser_test.php b/tests/codeigniter/libraries/Parser_test.php
index 44269ad..b4580a4 100644
--- a/tests/codeigniter/libraries/Parser_test.php
+++ b/tests/codeigniter/libraries/Parser_test.php
@@ -5,7 +5,7 @@
 class Parser_test extends CI_TestCase
 {
 	
-	public function setUp()
+	public function set_up()
 	{
 		$obj = new StdClass;
 		$obj->parser = new CI_Parser();
@@ -16,7 +16,7 @@
 	}
 	// --------------------------------------------------------------------
 	
-	public function testSetDelimiters()
+	public function test_set_delimiters()
 	{
 		// Make sure default delimiters are there
 		$this->assertEquals('{', $this->parser->l_delim);
@@ -39,7 +39,7 @@
 	
 	// --------------------------------------------------------------------
 	
-	public function testParseSimpleString()
+	public function test_parse_simple_string()
 	{
 		$data = array(
 			'title' => 'Page Title',
@@ -55,7 +55,7 @@
 	
 	// --------------------------------------------------------------------
 	
-	public function testParse()
+	public function test_parse()
 	{
 		$this->_parse_no_template();
 		$this->_parse_var_pair();
diff --git a/tests/codeigniter/libraries/Table_test.php b/tests/codeigniter/libraries/Table_test.php
index ded4c22..133179f 100644
--- a/tests/codeigniter/libraries/Table_test.php
+++ b/tests/codeigniter/libraries/Table_test.php
@@ -5,7 +5,7 @@
 class Table_test extends CI_TestCase
 {
 
-	public function setUp()
+	public function set_up()
 	{
 		$obj = new StdClass;
 		$obj->table = new CI_table();
@@ -19,7 +19,7 @@
 	// Setter Methods
 	// --------------------------------------------------------------------
 	
-	public function testSetTemplate()
+	public function test_set_template()
 	{
 		$this->assertFalse($this->table->set_template('not an array'));
 		
@@ -31,13 +31,13 @@
 		$this->assertEquals($template, $this->table->template);
 	}
 	
-	public function testSetEmpty()
+	public function test_set_empty()
 	{
 		$this->table->set_empty('nada');
 		$this->assertEquals('nada', $this->table->empty_cells);
 	}
 	
-	public function testSetCaption()
+	public function test_set_caption()
 	{
 		$this->table->set_caption('awesome cap');
 		$this->assertEquals('awesome cap', $this->table->caption);
@@ -47,7 +47,7 @@
 	/*
 	 * @depends testPrepArgs
 	 */
-	public function testSetHeading()
+	public function test_set_heading()
 	{
 		// uses _prep_args internally, so we'll just do a quick
 		// check to verify that func_get_args and prep_args are
@@ -69,7 +69,7 @@
 	/*
 	 * @depends testPrepArgs
 	 */
-	public function testAddRow()
+	public function test_add_row()
 	{
 		// uses _prep_args internally, so we'll just do a quick
 		// check to verify that func_get_args and prep_args are
@@ -95,7 +95,7 @@
 	// Uility Methods
 	// --------------------------------------------------------------------
 	
-	public function testPrepArgs()
+	public function test_prep_args()
 	{
 		$expected = array(
 			array('data' => 'name'),
@@ -139,7 +139,7 @@
 		'attributes');
 	}
 	
-	public function testDefaultTemplateKeys()
+	public function test_default_template_keys()
 	{
 		$deft_template = $this->table->_default_template();
 		$keys = array(
@@ -158,7 +158,7 @@
 		}
 	}
 	
-	public function testCompileTemplate()
+	public function test_compile_template()
 	{
 		$this->assertFalse($this->table->set_template('invalid_junk'));
 		
@@ -177,7 +177,7 @@
 		$this->assertEquals('</table junk>', $this->table->template['table_close']);
 	}
 	
-	public function testMakeColumns()
+	public function test_make_columns()
 	{
 		// Test bogus parameters
 		$this->assertFalse($this->table->make_columns('invalid_junk'));
@@ -213,7 +213,7 @@
 		$this->markTestSkipped('Look at commented assertFalse above');
 	}
 	
-	public function testClear()
+	public function test_clear()
 	{
 		$this->table->set_heading('Name', 'Color', 'Size');
 		
@@ -240,7 +240,7 @@
 	}
 	
 	
-	public function testSetFromArray()
+	public function test_set_from_array()
 	{
 		$this->assertFalse($this->table->_set_from_array('bogus'));
 		$this->assertFalse($this->table->_set_from_array(array()));
@@ -281,7 +281,7 @@
 		);
 	}
 	
-	function testSetFromObject()
+	function test_set_from_object()
 	{
 		$this->markTestSkipped('Not yet implemented.');
 	}
diff --git a/tests/codeigniter/libraries/Typography_test.php b/tests/codeigniter/libraries/Typography_test.php
index 242a6e9..a0533ba 100644
--- a/tests/codeigniter/libraries/Typography_test.php
+++ b/tests/codeigniter/libraries/Typography_test.php
@@ -5,7 +5,7 @@
 class Typography_test extends CI_TestCase
 {
 
-	public function setUp()
+	public function set_up()
 	{
 		$obj = new StdClass;
 		$obj->type = new CI_Typography();
@@ -22,7 +22,7 @@
 	 *
 	 * this can and should grow.
 	 */
-	public function testFormatCharacters()
+	public function test_format_characters()
 	{
 		$strs = array(
 			'"double quotes"' 				=> '&#8220;double quotes&#8221;',
@@ -46,7 +46,7 @@
 
 	// --------------------------------------------------------------------
 
-	public function testNl2brExceptPre()
+	public function test_nl2br_except_pre()
 	{	
 		$str = <<<EOH
 Hello, I'm a happy string with some new lines.  
@@ -94,7 +94,7 @@
 
 	// --------------------------------------------------------------------
 	
-	public function testAutoTypography()
+	public function test_auto_typography()
 	{
 		$this->_blank_string();
 		$this->_standardize_new_lines();
diff --git a/tests/codeigniter/libraries/User_agent_test.php b/tests/codeigniter/libraries/User_agent_test.php
index d1d950c..277c12e 100644
--- a/tests/codeigniter/libraries/User_agent_test.php
+++ b/tests/codeigniter/libraries/User_agent_test.php
@@ -9,7 +9,7 @@
 	protected $_user_agent = 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_7; en-us) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27';
 	protected $_mobile_ua = 'Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_1 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8B117 Safari/6531.22.7';
 	
-	public function setUp()
+	public function set_up()
 	{
 		// set a baseline user agent
 		$_SERVER['HTTP_USER_AGENT'] = $this->_user_agent;
@@ -24,7 +24,7 @@
 
 	// --------------------------------------------------------------------
 
-	public function testAcceptLang()
+	public function test_accept_lang()
 	{
 		$_SERVER['HTTP_ACCEPT_LANGUAGE'] = 'en';
 
@@ -35,7 +35,7 @@
 
 	// --------------------------------------------------------------------
 
-	public function testMobile()
+	public function test_mobile()
 	{
 		// Mobile Not Set
 		$_SERVER['HTTP_USER_AGENT'] = $this->_mobile_ua;
@@ -45,7 +45,7 @@
 
 	// --------------------------------------------------------------------
 
-	public function testUtilIsFunctions()
+	public function test_util_is_functions()
 	{
 		$this->assertTrue($this->agent->is_browser());
 		$this->assertFalse($this->agent->is_robot());
@@ -55,14 +55,14 @@
 
 	// --------------------------------------------------------------------
 
-	public function testAgentString()
+	public function test_agent_string()
 	{
 		$this->assertEquals($this->_user_agent, $this->agent->agent_string());
 	}
 
 	// --------------------------------------------------------------------
 
-	public function testBrowserInfo()
+	public function test_browser_info()
 	{
 		$this->assertEquals('Mac OS X', $this->agent->platform());
 		$this->assertEquals('Safari', $this->agent->browser());
@@ -73,7 +73,7 @@
 	
 	// --------------------------------------------------------------------
 
-	public function testCharsets()
+	public function test_charsets()
 	{
 		$_SERVER['HTTP_ACCEPT_CHARSET'] = 'utf8';
 		
diff --git a/tests/lib/ci_testcase.php b/tests/lib/ci_testcase.php
index 10539a3..8ca71fd 100644
--- a/tests/lib/ci_testcase.php
+++ b/tests/lib/ci_testcase.php
@@ -25,6 +25,8 @@
 		'model'		=> 'model'
 	);
 	
+	// --------------------------------------------------------------------
+	
 	public function __construct()
 	{
 		parent::__construct();
@@ -34,6 +36,26 @@
 	
 	// --------------------------------------------------------------------
 	
+	public function setUp()
+	{
+		if (method_exists($this, 'set_up'))
+		{
+			$this->set_up();
+		}
+	}
+	
+	// --------------------------------------------------------------------
+	
+	public function tearDown() 
+	{
+		if (method_exists($this, 'tear_down'))
+		{
+			$this->tear_down();
+		}
+	}
+	
+	// --------------------------------------------------------------------
+	
 	function ci_set_config($key, $val = '')
 	{
 		if (is_array($key))
